package com.ce.pms.charge.service;


import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.ce.pms.base.service.IPmsBaseService;
import com.ce.pms.charge.model.ChargeDatasDomain;
import com.ce.pms.charge.model.PeriodDomain;
import com.ce.pms.charge.vo.OriginalMeterDataVO;
import com.sitechasia.webx.core.support.Page;

public interface IMeterDataRegisterService extends IPmsBaseService {
	/**
	 * 方法描述: 根据走表原始数据ID验证其是否存在抄表数据
	 * @author 胡煦
	 * Create on:2008-10-6
	 * @param chargeDataId
	 * @return ture:说明存在抄表数据，false:说明不存在
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public void checkChargeDataHasCopyDoing(Long houseId);
	/**
	 * 方法描述: 验证修改的原始数据是否合法
	 * @author 胡煦
	 * Create on:2008-10-16
	 * @param chargeDataId,isDoGoOut:为true时说明是产权变更调用，否则为走表数据录入所用
	 * @return Map
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public Map checkEditMeterDataState(Long chargeDataId,boolean isDoGoOut);
	/**
	 * 方法描述: 验证调整的原始数据是否满足条件
	 * @author 胡煦
	 * Create on:2008-10-16
	 * @param chargeDataId
	 * @return Map
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public ChargeDatasDomain checkAjustMeterDataState(Long chargeDataId);
	/**
	 * 方法描述: 验证作废操作的合法性
	 * @author 胡煦
	 * Create on:2008-10-16
	 * @param meterDataid
	 * @return ChargeDatasDomain
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public ChargeDatasDomain checkabateMeterDataState(Long meterDataid);
	/**
	 * 方法描述: 修改某条走表读数，进行了抄表数据的验证
	 * @author 胡煦
	 * Create on:2008-8-15
	 * @param originalMeterDataVO
	 * @return originalMeterDataVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public OriginalMeterDataVO editOriginalMeterDataDoCheck(OriginalMeterDataVO originalMeterDataVO);
	/**
	 * 方法描述: 修改某条走表读数，根据不同的状态进行不同的处理
	 * @author 胡煦
	 * Create on:2008-8-15
	 * @param originalMeterDataVO，isDoGoOut:为true时说明是产权变更调用，否则为走表数据录入所用
	 * @return originalMeterDataVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public OriginalMeterDataVO editOriginalMeterDataBy(OriginalMeterDataVO originalMeterDataVO,boolean isDoGoOut);
	/**
	 *
	 * 功能描述: 通过收费周期id查询新建状态的走表实体List
	 *
	 * @author 胡煦
	 * Created on:2008-8-27
	 *
	 * 修改原因：
	 * @param periodId
	 * @return List<OriginalMeterDataVO> 返回结果
	 */
	public List<OriginalMeterDataVO> getMeterDatasListByPeriodId(Long periodId);
	/**
	 * 方法描述: 根据id查询抄表数据VO
	 * @author 胡煦
	 * Create on:2008-8-18
	 * @param ID
	 * @return OriginalMeterDataVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public OriginalMeterDataVO findMeterDataVOByID(Long meterDataId);
	/**
	 * 方法描述: 查询所有收费周期列表
	 * @author 胡煦
	 * Create on:2008-8-29
	 * @param
	 * @return List<PeriodDomain>
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public List<PeriodDomain> getAllPeriodDo();
	/**
	 * 方法描述: 调整走表读数
	 * @author 胡煦
	 * Create on:2008-8-15
	 * @param originalMeterDataVO
	 * @return originalMeterDataVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public OriginalMeterDataVO adjustMeterData(OriginalMeterDataVO originalMeterDataVO);
	/**
	 * 方法描述: 计算用量，本次读数〉上次读数，则=（本次读数-上次读数）本次读数<上次读数,则=（归零数-上次读数+本次读数）
	 * @author 胡煦
	 * Create on:2008-8-25
	 * @param lastReading，thisReading，meterId
	 * @return BigDecimal
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public BigDecimal countWastage(BigDecimal lastReading,BigDecimal thisReading ,Long meterId);
	/**
	 * 方法描述: 新增某条走表读数
	 * @author 胡煦
	 * Create on:2008-8-15
	 * @param originalMeterDataVO
	 * @return originalMeterDataVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public OriginalMeterDataVO addOriginalMeterData(OriginalMeterDataVO originalMeterDataVO);
	/**
	 * 方法描述: 根据ID作废走表原始数据
	 * @author 胡煦
	 * Create on:2008-8-14
	 * @param meterDataid,creatorId
	 * @return OriginalMeterDataVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public OriginalMeterDataVO abateMeterDataById(Long meterDataid,Long creatorId);
	/**
	 * 方法描述: 分页组合查询抄表数据方法
	 * @author 胡煦
	 * Create on:2008-8-14
	 * @param OriginalMeterDataVO
	 * @return Page
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */

	public Page getChargeDatasVOsByPage(OriginalMeterDataVO queryDataVO ,int currentPage,int pageSize);
	/**
	 * 方法描述: 根据房号查询某个收费周期下有效的水表和电表的抄表数据VO
	 * @author 胡煦
	 * Create on:2008-8-18
	 * @param houseNumber
	 * @return Map<String, OriginalMeterDataVO>
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public Map<String, OriginalMeterDataVO> findMeterDataVOBy(String houseNumber);
	/**
	 * 方法描述: 根据房号和走表类型查询某个收费周期下有效的抄表数据VO
	 * @author 胡煦
	 * Create on:2008-8-15
	 * @param houseId,meterTypeCode
	 * @return OriginalMeterDataVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public OriginalMeterDataVO findMeterDataVOByHouseNumber(String houseNumber,String meterTypeCode);

	/**
	 * 方法描述: 根据房屋ID查询抄表数据VO列表方法
	 * @author 胡煦
	 * Create on:2008-8-15
	 * @param houseId
	 * @return List<OriginalMeterDataVO>
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public List<OriginalMeterDataVO> findMeterDataVOListByHouseId(Long houseId);

	/**
	 * 方法描述: 根据房屋ID查询是否有抄表数据方法
	 * @author 胡煦
	 * Create on:2008-8-13
	 * @param houseId
	 * @return boolean 当有抄表数据时返回true,否则返回false
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public boolean checkMeterDataByHouseId(Long houseId);
	/**
	 * 方法描述: 按户录入走表读数
	 * @author 胡煦
	 * Create on:2008-8-14
	 * @param Set<OriginalMeterDataVO>
	 * @return Set<OriginalMeterDataVO>
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public Set<OriginalMeterDataVO> registerMeterDataByDoor(Set<OriginalMeterDataVO> meterDataVOSet);
//	/**
//	 * 方法描述: 按表录入走表读数
//	 * @author 胡煦
//	 * Create on:2008-8-14
//	 * @param OriginalMeterDataVO
//	 * @return OriginalMeterDataVO
//	 * Edit author:
//	 * Edit on:
//	 * 修改原因：
//	 */
//	public OriginalMeterDataVO registerDataByMeter(OriginalMeterDataVO originalMeterDataVO);
}
